

class Interface {
  virtual void fun();

}

class Drive : public Interface {
  virtual void fun() {}

}

class Library {
  Interface *p;
  void Test() {
    p = new Drive();
    p->fun();
  }

}

class SPI {
        virtual fun(T*)[
} void run() {
        this->fun(t);
}
}

class Derive : public SPI {
        // when market recv this func be call
        virtual fun(T *) {}
}